home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / site-packages / Numeric / ArrayPrinter.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2006-03-29  |  7KB  |  264 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.4)
  3.  
  4. import sys
  5. from umath import *
  6. import Numeric
  7.  
  8. def array2string(a, max_line_width = None, precision = None, suppress_small = None, separator = ' ', array_output = 0):
  9.     """array2string(a, max_line_width = None, precision = None,
  10.                      suppress_small = None, separator=' ',
  11.                      array_output=0)"""
  12.     if len(a.shape) == 0:
  13.         return str(a[0])
  14.     
  15.     if multiply.reduce(a.shape) == 0:
  16.         return "zeros(%s, '%s')" % (a.shape, a.typecode())
  17.     
  18.     if max_line_width is None:
  19.         
  20.         try:
  21.             max_line_width = sys.output_line_width
  22.         except AttributeError:
  23.             max_line_width = 77
  24.         except:
  25.             None<EXCEPTION MATCH>AttributeError
  26.         
  27.  
  28.     None<EXCEPTION MATCH>AttributeError
  29.     if precision is None:
  30.         
  31.         try:
  32.             precision = sys.float_output_precision
  33.         except AttributeError:
  34.             precision = 8
  35.         except:
  36.             None<EXCEPTION MATCH>AttributeError
  37.         
  38.  
  39.     None<EXCEPTION MATCH>AttributeError
  40.     if suppress_small is None:
  41.         
  42.         try:
  43.             suppress_small = sys.float_output_suppress_small
  44.         except AttributeError:
  45.             suppress_small = 0
  46.         except:
  47.             None<EXCEPTION MATCH>AttributeError
  48.         
  49.  
  50.     None<EXCEPTION MATCH>AttributeError
  51.     data = Numeric.ravel(a)
  52.     type = a.typecode()
  53.     items_per_line = a.shape[-1]
  54.     if type == 'b' and type == '1' and type == 's' and type == 'i' and type == 'w' and type == 'l' or type == 'u':
  55.         max_str_len = max(len(str(maximum.reduce(data))), len(str(minimum.reduce(data))))
  56.         format = '%' + str(max_str_len) + 'd'
  57.         item_length = max_str_len
  58.         
  59.         format_function = lambda x, f = format: _formatInteger(x, f)
  60.     elif type == 'f' or type == 'd':
  61.         (format, item_length) = _floatFormat(data, precision, suppress_small)
  62.         
  63.         format_function = lambda x, f = format: _formatFloat(x, f)
  64.     elif type == 'F' or type == 'D':
  65.         (real_format, real_item_length) = _floatFormat(data.real, precision, suppress_small, sign = 0)
  66.         (imag_format, imag_item_length) = _floatFormat(data.imaginary, precision, suppress_small, sign = 1)
  67.         item_length = real_item_length + imag_item_length + 3
  68.         
  69.         format_function = lambda x, f1 = real_format, f2 = imag_format: _formatComplex(x, f1, f2)
  70.     elif type == 'c':
  71.         item_length = 1
  72.         
  73.         format_function = lambda x: x
  74.     elif type == 'O':
  75.         item_length = max(map((lambda x: len(str(x))), data))
  76.         format_function = _formatGeneral
  77.     else:
  78.         return str(a)
  79.     final_spaces = type != 'c'
  80.     item_length = item_length + len(separator)
  81.     line_width = item_length * items_per_line - final_spaces
  82.     if line_width > max_line_width:
  83.         indent = 6
  84.         if indent == item_length:
  85.             indent = 8
  86.         
  87.         items_first = (max_line_width + final_spaces) / item_length
  88.         if items_first < 1:
  89.             items_first = 1
  90.         
  91.         items_continuation = (max_line_width + final_spaces - indent) / item_length
  92.         if items_continuation < 1:
  93.             items_continuation = 1
  94.         
  95.         line_width = max(item_length * items_first, item_length * items_continuation + indent) - final_spaces
  96.         number_of_lines = 1 + ((items_per_line - items_first) + items_continuation - 1) / items_continuation
  97.         line_format = (number_of_lines, items_first, items_continuation, indent, line_width, separator)
  98.     else:
  99.         line_format = (1, items_per_line, 0, 0, line_width, separator)
  100.     lst = _arrayToString(a, format_function, len(a.shape), line_format, 6 * array_output, 0)[:-1]
  101.     if array_output:
  102.         if a.typecode() in [
  103.             'l',
  104.             'd',
  105.             'D']:
  106.             return 'array(%s)' % lst
  107.         else:
  108.             return "array(%s,'%s')" % (lst, a.typecode())
  109.     else:
  110.         return lst
  111.  
  112.  
  113. def _floatFormat(data, precision, suppress_small, sign = 0):
  114.     exp_format = 0
  115.     non_zero = abs(Numeric.compress(not_equal(data, 0), data))
  116.     if len(non_zero) == 0:
  117.         max_val = 0.0
  118.         min_val = 0.0
  119.     else:
  120.         max_val = float(maximum.reduce(non_zero))
  121.         min_val = float(minimum.reduce(non_zero))
  122.         if max_val >= 100000000.0:
  123.             exp_format = 1
  124.         
  125.         if not suppress_small:
  126.             if min_val < 0.0001 or max_val / min_val > 1000.0:
  127.                 exp_format = 1
  128.             
  129.     if exp_format:
  130.         large_exponent = None if min_val < min_val else max_val >= 1e+100
  131.         max_str_len = 8 + precision + large_exponent
  132.         if sign:
  133.             format = '%+'
  134.         else:
  135.             format = '%'
  136.         format = format + str(max_str_len) + '.' + str(precision) + 'e'
  137.         if large_exponent:
  138.             format = format + '3'
  139.         
  140.         item_length = max_str_len
  141.     else:
  142.         format = '%.' + str(precision) + 'f'
  143.         precision = min(precision, max(tuple(map((lambda x, p = precision, f = format: _digits(x, p, f)), data))))
  144.         max_str_len = len(str(int(max_val))) + precision + 2
  145.         if sign:
  146.             format = '%#+'
  147.         else:
  148.             format = '%#'
  149.         format = format + str(max_str_len) + '.' + str(precision) + 'f'
  150.         item_length = max_str_len
  151.     return (format, item_length)
  152.  
  153.  
  154. def _digits(x, precision, format):
  155.     s = format % x
  156.     zeros = len(s)
  157.     while s[zeros - 1] == '0':
  158.         zeros = zeros - 1
  159.     return (precision - len(s)) + zeros
  160.  
  161.  
  162. def _arrayToString(a, format_function, rank, line_format, base_indent = 0, indent_first = 1):
  163.     if rank == 0:
  164.         return str(a[0])
  165.     elif rank == 1:
  166.         s = ''
  167.         s0 = '['
  168.         items = line_format[1]
  169.         if indent_first:
  170.             indent = base_indent
  171.         else:
  172.             indent = 0
  173.         index = 0
  174.         for j in range(line_format[0]):
  175.             s = s + indent * ' ' + s0
  176.             for i in range(items):
  177.                 s = s + format_function(a[index]) + line_format[-1]
  178.                 index = index + 1
  179.                 if index == a.shape[0]:
  180.                     break
  181.                     continue
  182.             
  183.             if s[-1] == ' ':
  184.                 s = s[:-1]
  185.             
  186.             s = s + '\n'
  187.             items = line_format[2]
  188.             indent = line_format[3] + base_indent
  189.             s0 = ''
  190.         
  191.         s = s[:-len(line_format[-1])] + ']\n'
  192.     elif indent_first:
  193.         s = ' ' * base_indent + '['
  194.     else:
  195.         s = '['
  196.     for i in range(a.shape[0] - 1):
  197.         s = s + _arrayToString(a[i], format_function, rank - 1, line_format, base_indent + 1, indent_first = i != 0)
  198.         s = s[:-1] + line_format[-1][:-1] + '\n'
  199.     
  200.     s = s + _arrayToString(a[a.shape[0] - 1], format_function, rank - 1, line_format, base_indent + 1)
  201.     s = s[:-1] + ']\n'
  202.     return s
  203.  
  204.  
  205. def _formatInteger(x, format):
  206.     return format % x
  207.  
  208.  
  209. def _formatFloat(x, format, strip_zeros = 1):
  210.     if format[-1] == '3':
  211.         format = format[:-1]
  212.         s = format % x
  213.         third = s[-3]
  214.         if third == '+' or third == '-':
  215.             s = s[1:-2] + '0' + s[-2:]
  216.         
  217.     elif format[-1] == 'f':
  218.         s = format % x
  219.         if strip_zeros:
  220.             zeros = len(s)
  221.             while s[zeros - 1] == '0':
  222.                 zeros = zeros - 1
  223.             s = s[:zeros] + (len(s) - zeros) * ' '
  224.         
  225.     else:
  226.         s = format % x
  227.     return s
  228.  
  229.  
  230. def _formatComplex(x, real_format, imag_format):
  231.     r = _formatFloat(x.real, real_format)
  232.     i = _formatFloat(x.imag, imag_format, 0)
  233.     if imag_format[-1] == 'f':
  234.         zeros = len(i)
  235.         while zeros > 2 and i[zeros - 1] == '0':
  236.             zeros = zeros - 1
  237.         i = i[:zeros] + 'j' + (len(i) - zeros) * ' '
  238.     else:
  239.         i = i + 'j'
  240.     return r + i
  241.  
  242.  
  243. def _formatGeneral(x):
  244.     return str(x) + ' '
  245.  
  246. if __name__ == '__main__':
  247.     a = Numeric.arange(10)
  248.     b = Numeric.array([
  249.         a,
  250.         a + 10,
  251.         a + 20])
  252.     c = Numeric.array([
  253.         b,
  254.         b + 100,
  255.         b + 200])
  256.     print array2string(a)
  257.     print array2string(b)
  258.     print array2string(sin(c), separator = ', ', array_output = 1)
  259.     print array2string(sin(c) + (0.0+1.0j) * cos(c), separator = ', ', array_output = 1)
  260.     print array2string(Numeric.array([
  261.         [],
  262.         []]))
  263.  
  264.